package com.ruoyi.system.service;

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class AesKeyGenerator {

    /**
     * 生成指定长度（128、192、256位）的AES密钥。
     *
     * @param keyLength 指定密钥长度，应为128、192或256。
     * @return 生成的AES密钥对象。
     * @throws NoSuchAlgorithmException 如果不支持指定的密钥长度或AES算法。
     */
    public static SecretKey generateKey(int keyLength) throws NoSuchAlgorithmException {
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(keyLength);
        return keyGen.generateKey();
    }

    /**
     * 将AES密钥转换为Base64编码的字符串。
     *
     * @param secretKey 待编码的AES密钥对象。
     * @return Base64编码的密钥字符串。
     */
    public static String encodeKeyToBase64(SecretKey secretKey) {
        byte[] keyBytes = secretKey.getEncoded();
        return Base64.getEncoder().encodeToString(keyBytes);
    }

    /**
     * 解码Base64编码的AES密钥字符串为密钥对象。
     *
     * @param base64EncodedKey Base64编码的密钥字符串。
     * @return 解码后的AES密钥对象。
     * @throws IllegalArgumentException 如果提供的Base64编码字符串无法解析为有效的AES密钥。
     */
    public static SecretKey decodeKeyFromBase64(String base64EncodedKey) {
        byte[] keyBytes = Base64.getDecoder().decode(base64EncodedKey);
        return new SecretKeySpec(keyBytes, "AES");
    }
}
